package main

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

// UserInfo 用户信息
type UserInfo struct {
	ID     uint
	Name   string
	Gender string
	Hobby  string
}

func main() {
	dsn := "root:root@tcp(127.0.0.1:3306)/gorm?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}

	// 自动迁移
	err = db.AutoMigrate(&UserInfo{})
	if err != nil {
		panic("failed to migrate")
	}

	u1 := UserInfo{1, "杨洋", "男", "篮球"}

	// 创建记录
	db.Create(&u1)
	db.Create(&UserInfo{2, "王楚然", "女", "足球"})
	// 查询
	var u = new(UserInfo)
	db.First(&u, 1) // 根据整型主键查找
	fmt.Printf("%#v\n", u)

	var uu UserInfo
	db.First(&uu, "hobby=?", "足球") //查找 hobby 字段值为 足球 的记录
	fmt.Printf("%#v\n", uu)

	// 更新
	db.Model(&u).Update("hobby", "排球")
	//Update - 更新多个字段
	db.Model(&u).Updates(UserInfo{Name: "肖战", Hobby: "跳舞"}) // 仅更新非零值字段
	db.Model(&uu).Updates(map[string]interface{}{"Hobby": "演戏", "Name": "赵丽颖"})

	// 删除
	db.Delete(&u, 1)
}
